/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.its.dsw2.biblioteca.bl;

import java.sql.Time;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import mx.its.dsw2.biblioteca.dao.DetallePrestamoDaoLocal;
import mx.its.dsw2.biblioteca.dao.PrestamoDaoLocal;
import mx.its.dsw2.biblioteca.dao.UsuarioDaoLocal;
import mx.its.dsw2.biblioteca.enumeracion.EstadoDetallePrestamo;
import mx.its.dsw2.biblioteca.enumeracion.EstadoPrestamo;
import mx.its.dsw2.biblioteca.enumeracion.EstadoTransaccion;
import mx.its.dsw2.biblioteca.modelo.DetallePrestamo;
import mx.its.dsw2.biblioteca.modelo.Libro;
import mx.its.dsw2.biblioteca.modelo.Prestamo;
import mx.its.dsw2.biblioteca.modelo.Usuario;

/**
 *
 * @author lesly
 */
@Stateless
public class PrestamoBl implements PrestamoBlLocal {
    @EJB
    private UsuarioDaoLocal usuarioDao;
    @EJB
    private DetallePrestamoDaoLocal detallePrestamoDao;
    @EJB
    private PrestamoDaoLocal prestamoDao;
    
    
    @Override
    public EstadoTransaccion register(Prestamo lend, List<Libro> book) {
        
        int available=3;
        List<Prestamo> incompleteLends=
                prestamoDao.findIncomplete(lend.getIdUsuario());
        for(Prestamo p: incompleteLends) {
        available = available - detallePrestamoDao.findLends(p).size();
        }     
        if(available <=0 || book.size() > available){
        return EstadoTransaccion.INCOMPLETO;
        }else{
            Date d=new Date();
            lend.setFecha(d);
            lend.setHora(new Time(new Date().getTime()));
            lend.setEstado(EstadoPrestamo.PENDIENTE.ordinal());
        prestamoDao.create(lend);
        for(Libro b: book){
        DetallePrestamo dp=new  DetallePrestamo();
        dp.setIdLibro(b);
        dp.setIdPrestamo(lend);
        dp.setEstado(EstadoDetallePrestamo.PRESTADO.ordinal());
        detallePrestamoDao.create(dp);
        }
        return EstadoTransaccion.COMPLETO;
        }
    }

    @Override
    public EstadoTransaccion takeBack(List<Libro> book) {
        for(Libro b: book ){
        DetallePrestamo dp= detallePrestamoDao.findBooks(b);
        if(dp==null){
        return EstadoTransaccion.INCOMPLETO;
        }else{
        dp.setEstado(EstadoDetallePrestamo.REGRESADO.ordinal());
        detallePrestamoDao.edit(dp);
        
        }
        }
        return null;
    }

    @Override
    public List<Prestamo> incompletedLendsByUser(Usuario user) {
       return prestamoDao.findIncomplete(user);
        
    }

    @Override
    public List<Libro> lendsBooksByUser(Usuario user,Prestamo lend) {
        int available=3;
        List<Prestamo> incompleteLends=
                prestamoDao.findIncomplete(lend.getIdUsuario());
        for(Prestamo p: incompleteLends) {
        available = available - detallePrestamoDao.findLends(p).size();
        } 
        return null;
    }

    @Override
    public List<Prestamo> generalIncompleteLends() {
        return null;
    }

    @Override
    public List<Libro> generalLendsBooks() {
        return null;
    }

    @Override
    public List<Prestamo> getAll() {
        return prestamoDao.findAll();
    }
    

}